package manager;


import interfaz.ManagerURLIf;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.log4j.Logger;

import type.EstadoType;
import type.ModuloType;
import type.ServiceType;
import domain.URL;
import dto.URLDTO;
import exceptions.ExceptionURL;

@Stateless
public class ManagerURL  implements ManagerURLIf{
	private static Logger logger = Logger.getLogger(ManagerURL.class);
	@PersistenceContext(unitName="tpoai")
    EntityManager em;

	public ManagerURL() throws RemoteException {
		super();
		// TODO Auto-generated constructor stub
	}

	
	public String getUrl(ServiceType servicio, ModuloType modulo,String grupo)throws ExceptionURL, RemoteException {
		URL var=(URL)em.createQuery("select u from URL u where u.servicioIntegracion = :servicio and u.modulo = :modulo and u.grupo = :grupo ").setParameter("servicio",servicio).setParameter("modulo", modulo).setParameter("grupo", grupo).getSingleResult();
		return var.getUrl();

				
		
	}

	public String getUrlActive(ServiceType servicio, ModuloType modulo)throws ExceptionURL, RemoteException {
		URL var=(URL)em.createQuery("select u from URL u where u.servicioIntegracion = :servicio and u.modulo = :modulo and u.estado = :estado ").setParameter("servicio",servicio).setParameter("modulo", modulo).setParameter("estado", EstadoType.ACTIVO).getSingleResult();
		return var.getUrl();

	}
	
	@Override
	public List<URLDTO> getUrls() throws ExceptionURL, RemoteException {
		@SuppressWarnings("rawtypes")
		Iterator q = em.createQuery("select c from URL c").getResultList().iterator();
		
		List<URLDTO> urls=new ArrayList<URLDTO>();
		
		  while(q.hasNext())
		  {
		    URL c = (URL)q.next();
		    urls.add(c.getVista());
		  }
		  return urls;
	}


	@Override
	public void save(URLDTO u) throws ExceptionURL, RemoteException {
		URL url=new URL();
		url.setGrupo(u.getGrupo());
		url.setModulo(u.getModulo());
		url.setServicioIntegracion(u.getServicioIntegracion());
		url.setUrl(u.getUrl());
		url.setEstado(EstadoType.ACTIVO);
		em.merge(url);	
		
	}


	@Override
	public void borrar(String parameter) throws ExceptionURL, RemoteException {
		
		URL q = (URL)em.createQuery("select c from URL c where c.id=:url").setParameter("url", Integer.valueOf(parameter)).getSingleResult();
		if(q.getEstado().equals(EstadoType.ACTIVO)){
			q.setEstado(EstadoType.NO_ACTIVO);
		}else if(q.getEstado().equals(EstadoType.NO_ACTIVO)){
			q.setEstado(EstadoType.ACTIVO);
		}
		em.merge(q);
		em.flush();
		
	}








}
